#pragma once

#include <array>
#include <cstdint>


namespace TLAC::Input::RawInputDetails
{
	class RGBStates {
	public:
		static const std::array<unsigned char, 97>* GetSliderBRGArray() {
			if (*slider_brg_struct_ == 0) {
				return nullptr;
			}
			return reinterpret_cast<std::array<unsigned char, 97>*> (*slider_brg_struct_ + slider_brg_struct_offset_);
		}
		static unsigned char GetButtonLightsPackedByte() {
			return *button_lights_;
		}
		static const unsigned char* GetPartitionLightsRGBPackedByte() {
			if (*partition_lights_rgb_ == 0) {
				return nullptr;
			}
			return reinterpret_cast<unsigned char*> (*partition_lights_rgb_ + partition_lights_rgb_offset_);
		}
	private:
		static constexpr volatile std::uint64_t* slider_brg_struct_ = reinterpret_cast<std::uint64_t*>(0x14cc5de40 + 0x68);
		static constexpr std::uint64_t slider_brg_struct_offset_ = 0x189c;
		static constexpr volatile unsigned char* button_lights_ = reinterpret_cast<unsigned char*> (0x14119b950);
		static constexpr volatile std::uint64_t* partition_lights_rgb_ = reinterpret_cast<std::uint64_t*> (0x140eda330);
		static constexpr std::uint64_t partition_lights_rgb_offset_ = 0xc9;
	};
}